import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);


var cart = JSON.parse(localStorage.getItem('cart') || '[]');

var store = new Vuex.Store({
    state:{
        //类似于 组件中的 data  $store.state.count
        count:0,
        cart: cart
    },
    mutations:{
        addToCart(state,goodsinfo){
            var flag = false;

            state.cart.some(item => {
                if(item.id == goodsinfo.id){
                    item.count += parseInt(goodsinfo.count)
                    flag = true
                    return true
                }
            })

            if(!flag)
            {
                state.cart.push(goodsinfo)                
            }

            //当 更新cart之后，把cart数组存储到本地的localStorage中
            localStorage.setItem('cart', JSON.stringify(state.cart))
        }
    },
    getters:{
        //注意：这里的getters，只负责对外提供数据，不负责 修改数据，如果想要修改 state 中的数据，请 去找 mutations
        //$store.getters.optCount
        optCount:function(count){
            return stat.count
        }
    }
})

export default store


//总结：
//1.state中的数据，不能直接修改，如果想要修改，必须通过 mutations
//2.如果组件想要直接 从 state 上获取数据，需要 this.$store.state.***
//3.如果 组件，想要修改数据，必须使用 mutations 提供的方法，需要通过 this.$store.commit('方法的名称',唯一的一个参数)
//4.如果 store 中 state 上的数据，在对外提供的时候，需要做一层包装，那么，推荐使用getters，如果需要使用 getters，则用 this.$store.getters.***